using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using TOAcademias;
using BOAcademias;
using System.Collections.Generic;
using System.Drawing;

public partial class Inicio : System.Web.UI.Page
{

    BOPlanificarAcademia boPlanificarAcademia = new BOPlanificarAcademia();
    BOSeccion boSeccion = new BOSeccion();
    BOHorario boHorario = new BOHorario();


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) {

            Session["codPlanificacion"] = "";
            btnNuevaSeccion.Visible = false;
            TOPeriodo periodoActivo = boPlanificarAcademia.obtenerPeriodoActivo();
            Wizard1.HeaderText = Wizard1.HeaderText + " para Periodo " + periodoActivo.Descripcion; 
        }

    }
    

    public void actualizarPlanificacion() {

        List<TOAcademia> listaAcademias = boPlanificarAcademia.obtenerAcademiasActivas();

        foreach (ListItem item in chkAcademias.Items)
        {

            TOAcademia toAcademia = listaAcademias.Find(delegate(TOAcademia bk)
            {

                return bk.Cod_Academia == item.Value;
            });

            toAcademia.PlanSeleccion = item.Selected;

        }


        boPlanificarAcademia.actualizarPlanificaciones(listaAcademias);

        Console.WriteLine("Se finalizo la actualizacion");

        AcademiaGridView.DataBind();
    
    }

    protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
    {
        String wizardStep= ((Wizard)sender).ActiveStep.Name;

        if ( wizardStep == "Escoger Academias") {
            actualizarPlanificacion();
        }
        
    }
   

    protected void chkAcademias_DataBound(object sender, EventArgs e)
    {
        TOPeriodo periodoActivo = boPlanificarAcademia.obtenerPeriodoActivo();
        Session["periodo"] = periodoActivo.Codigo;
        

        List<TOPlanificacion> listaPlanificacion = boPlanificarAcademia.obtenerPlanificacionesXPeriodo(periodoActivo.Codigo);

        if (listaPlanificacion.Count > 0)
        {

            foreach (ListItem item in chkAcademias.Items)
            {

                TOPlanificacion toAcademia = listaPlanificacion.Find(delegate(TOPlanificacion bk)
                {

                    return bk.Cod_Academia == item.Value;
                });

                if (toAcademia != null)
                {
                    item.Selected = true;
                }

            }
        }
    }

    
    protected void AcademiaGridView_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow row = AcademiaGridView.SelectedRow;
        btnNuevaSeccion.Visible = true;
        Session["codPlanificacion"] = row.Cells[0].Text;
        Panel1.Visible = false;
        SeccionesGridView.DataBind();
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        TOSeccion toSeccion = new TOSeccion();
        toSeccion.Cod_seccion = lblCodigo.Text;
        toSeccion.Des_seccion = txtDescripcion.Text;
        toSeccion.Cod_planificacion = Session["codPlanificacion"].ToString();
        toSeccion.Cod_instructor = cmbInstructor.SelectedValue;
        toSeccion.Estado = cmbEstado.SelectedValue;
        toSeccion.Cap_maxima = Convert.ToInt32(txtCapacidadMaxima.Text);
        toSeccion.Cap_minima = Convert.ToInt32(txtCapacidadMinima.Text);

        boSeccion.modificarSeccion(toSeccion);

        clearControls();
        SeccionesGridView.DataBind();

        Panel1.Visible = false;

       
    }
    protected void btnNuevaSeccion_Click(object sender, EventArgs e)
    {
        btnInsertar.Visible = true;
        btnCancelar.Visible = true;
        btnModificar.Visible = false;

        Label1.Text = "Nueva Seccion";
        Panel1.Visible = true;
        Panel2.Visible = false;
        clearControls();
    }
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
       
        Panel1.Visible = false;
    }
    protected void SeccionesGridView_SelectedIndexChanged(object sender, EventArgs e)
    {
        Label1.Text = "Modificar Seccion";
        btnInsertar.Visible = false;
        btnCancelar.Visible = true;
        btnModificar.Visible = true;

        GridViewRow row = SeccionesGridView.SelectedRow;
        TOSeccion seccion= boSeccion.obtenerSeccion(row.Cells[0].Text);
        lblCodigo.Text=seccion.Cod_seccion;
        txtDescripcion.Text = seccion.Des_seccion;
        txtCapacidadMaxima.Text = seccion.Cap_maxima.ToString();
        txtCapacidadMinima.Text = seccion.Cap_minima.ToString();
        cmbEstado.SelectedValue = seccion.Estado;
        cmbInstructor.SelectedValue = seccion.Cod_instructor;
        Panel1.Visible = true;
        Panel2.Visible = true;
        Session["codSeccion"] = seccion.Cod_seccion;

        btnModHor.Visible = true;
        btnGuarHor.Visible = false;
        cmbInfra.Visible = false;

        List<Button> botones = FindControlRecursive(Wizard1);

        habilitarBotones(botones, false);

        habilitarHorarioxSeccion();


    }

    protected void btnInsertar_Click(object sender, EventArgs e)
    {
        TOSeccion toSeccion= new TOSeccion();

        toSeccion.Des_seccion = txtDescripcion.Text;
        toSeccion.Cod_planificacion = Session["codPlanificacion"].ToString();
        toSeccion.Cod_instructor = cmbInstructor.SelectedValue;
        toSeccion.Estado = cmbEstado.SelectedValue;
        toSeccion.Cap_maxima = Convert.ToInt32(txtCapacidadMaxima.Text) ;
        toSeccion.Cap_minima = Convert.ToInt32(txtCapacidadMinima.Text);

        boSeccion.insertarSeccion(toSeccion);

        clearControls();
        SeccionesGridView.DataBind();

        Panel1.Visible = false;
    }

    private void clearControls()
    {
        lblCodigo.Text = "";
        txtDescripcion.Text = "";
       // cmbInstructor.SelectedIndex=0;
        //cmbEstado.SelectedIndex=0;
        txtCapacidadMaxima.Text = "";
        txtCapacidadMinima.Text = "";
    }
    
    protected void Button1_Click1(object sender, EventArgs e)
    {

        Button btnAux = ((Button)sender);
        
        TOHorario toHorario = new TOHorario();
        toHorario.Cod_infraestructura = cmbInfra.SelectedValue;
        toHorario.Cod_seccion = lblCodigo.Text;
        toHorario.Estado = "ACTIVO";
        toHorario.Dia = Convert.ToInt32( btnAux.ID.Substring(3,1));
        toHorario.Hora = Convert.ToInt32(btnAux.ID.Substring(4));


        if (btnAux.BackColor != Color.Red)
        {
            btnAux.BackColor = Color.Red;
            

            boHorario.insertarHorario(toHorario);
        }
        else {

            ((Button)sender).BackColor = Color.Empty;
            boHorario.eliminarHorario(toHorario);
        }


    }
    protected void btnModHor_Click(object sender, EventArgs e)
    {
        btnModHor.Visible = false;
        btnGuarHor.Visible = true;
        cmbInfra.Visible = true;

        habilitarHorarioxInfra();
        

    }

    public void habilitarHorarioxInfra() {
        List<Button> botones = FindControlRecursive(Wizard1);

        habilitarBotones(botones,true);

        List<TOHorario> listahorario= boHorario.obtenerHorariosxInf(cmbInfra.SelectedValue);

 
        foreach (Button button in botones)
        {

            TOHorario horario = listahorario.Find(delegate(TOHorario bk)
            {

                string hora = "" + bk.Hora;
                string buttonName = "btn" + bk.Dia + "00";

                buttonName = buttonName.Substring(0, 6 - hora.Length) + hora;


                return button.ID == buttonName;
            });


            if (horario != null)
            {
                if (horario.Cod_seccion != Session["codSeccion"].ToString())
                {
                    button.Enabled = false;
                    button.Text = horario.Cod_seccion;
                    button.BackColor = Color.Yellow;
                }
                else
                {
                    button.BackColor = Color.Red;
                }

                
            }

        }
  
    
    }


    public void habilitarHorarioxSeccion()
    {
        List<Button> botones = FindControlRecursive(Wizard1);     

        List<TOHorario> listahorario = boHorario.obtenerHorariosxSec(lblCodigo.Text);


        foreach (Button button in botones)
        {

            TOHorario horario = listahorario.Find(delegate(TOHorario bk)
            {

                string hora = "" + bk.Hora.ToString();
                string buttonName = "btn" + bk.Dia.ToString() + "00";

                buttonName = buttonName.Substring(0, 6 - hora.Length) + hora;


                return button.ID == buttonName;
            });


            if (horario != null)
            {               
                button.BackColor = Color.Red;
                button.Text = horario.Cod_infraestructura;
                
            }

        }

    }


    private static void habilitarBotones(List<Button> botones , bool flag)
    {
        foreach (Button boton in botones)
        {

            boton.Enabled = flag;
            boton.BackColor = Color.Empty;
            boton.Text = string.Empty;

        }
    }


    private Control FindControlRecursive(Control root, string id)
    {
        if (root.ID == id)
        {
            return root;
        }

        foreach (Control c in root.Controls)
        {
            Control t = FindControlRecursive(c, id);
            if (t != null)
            {
                return t;
            }
        }

        return null;
    }

    private List<Button> FindControlRecursive(Control root)
    {
        List<Button> control_list = new List<Button>();
        if (root.ID != null)
        {
            if (root.ID.Length == 6)
            {
                string aux = root.ID.Substring(0, 3);
                if (aux.Equals("btn"))
                    control_list.Add((Button)root);
            }
        }
        foreach (Control c in root.Controls)
        {
            List<Button> t = FindControlRecursive(c);
            if (t != null)
            {
                foreach (Button button in t) {

                    control_list.Add(button);
                }


            }
        }

        return control_list;
    }


    protected void cmbInfra_SelectedIndexChanged(object sender, EventArgs e)
    {
        habilitarHorarioxInfra();
    }
    protected void btnGuarHor_Click(object sender, EventArgs e)
    {
        btnModHor.Visible = true;
        btnGuarHor.Visible = false;
        cmbInfra.Visible = false;
        List<Button> botones = FindControlRecursive(Wizard1);

        habilitarBotones(botones, false);
        habilitarHorarioxSeccion();
            

    }
}
